import React from "react";
import UserStore from "./modal/User";

/**
 * @description 提供hook方式，方便组件内部获取Store
 * @param {*} storeName 组件名字。作用类似inject(storeName)，不传默认返回rootStore
 */
export const useStore = (storeName: string) => {
  const rootStore = React.useContext(rootStoreContext);
  if (storeName) {
    // @ts-ignore
    const childStore = rootStore[storeName];
    if (!childStore) {
      throw new Error("根据传入storeName，找不到对应的子store");
    }
    return childStore;
  }
  return rootStore;
};

export class RootStore {
  constructor() {
    this.userStore = new UserStore(this);
  }
  userStore: UserStore;
}

const rootStore = new RootStore();

export const rootStoreContext = React.createContext(rootStore);
export default rootStore;
